*Replication Instructions for

*Satisfaction with Democracy after Presidential Power Transitions: Panel Survey Evidence from the 2025 Trump Transition in the United States


*Sam Whitt , Alixandra B. Yanus , Gordon Ballingrud , Martin Kifer , Mark Setzler 


*Department of Political Science
*High Point University
*One University Parkway
*High Point, NC 27268

*Below are instructions for replicating all manuscript and online appendix tables and figures in STATA using the dataset "PP replication data". Excel spreadsheets are also included for several figures "PP All Excel Figures". Please contact Sam Whitt (swhitt@highpoint.edu) for questions regarding data replication. 

*Note: You may need to install STATA packages for the cibar, catcibar, and iebaltab commands. Use findit with the command name to identify and download the appropriate packets to install. 
*"Stata user-generated commands to install for replication purposes"

*"cibar"

ssc install cibar, replace

*"iebaltab from ietoolkit"

ssc install ietoolkit, replace

*"catcibar"
net install catcibar, from("https://aarondwolf.github.io/catcibar") replace

*reghdfe
ssc install reghdfe

*Manuscript Replication

*In text replication

*The first wave took place from January 16, 2025, through the morning of January 20, with a total baseline sample of 1360 respondents. The first follow-up wave was conducted February 1-8 (approximately 2 weeks after inauguration) with 710 respondents, while the final wave was carried out between April 23 and May 8 (roughly 100 days after the inauguration) with 600 respondents. 

tab EndDate if wave==1
tab EndDate if wave==2
tab EndDate if wave==3

*Tables and Figures

*Figure 2a. Satisfaction with Democracy by Party Identification Pre/Post Transition

tab revdemsat if wave==1 & partyid==1
tab revdemsat if wave==2 & partyid==1
tab revdemsat if wave==3 & partyid==1

tab revdemsat if wave==1 & partyid==2
tab revdemsat if wave==2 & partyid==2
tab revdemsat if wave==3 & partyid==2

tab revdemsat if wave==1 & partyid==3
tab revdemsat if wave==2 & partyid==3
tab revdemsat if wave==3 & partyid==3

*Figure 2b. Average Satisfaction with Democracy Pre/Post Transition

cibar revdemsat if partyid<4, over1(wave) over2(partyid) vce(cluster psidcode3)

*Figure 3. Changes in Mechanistic Variables Pre/Post Transition

cibar alphaeconoutlook if partyid<4, over1(wave) over2(partyid) vce(cluster psidcode3)
cibar posaffect if partyid<4, over1(wave) over2(partyid) vce(cluster psidcode3)
cibar negaffect if partyid<4, over1(wave) over2(partyid) vce(cluster psidcode3)
cibar revtrustpres if partyid<4, over1(wave) over2(partyid) vce(cluster psidcode3)

*Table 1. Satisfaction with Democracy over Time (OLS Regression)

reg revdemsat i.wave##ib3.partyid if partyid<4, vce(cluster psidcode3)
xtset psidcode3
xtreg revdemsat i.wave##ib3.partyid if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid alphaeconoutlook  if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid posaffect negaffect if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid revtrustpres if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid alphaeconoutlook posaffect negaffect revtrustpres if partyid<4 & count==3, fe vce(cluster psidcode3)

*Table 2

mediate(revdemsat wave1dem wave1rep wave2rep wave2ind wave3dem wave3rep wave3ind, linear) (revtrustpres wave1dem wave1rep wave2rep wave2ind wave3dem wave3rep wave3ind, linear) (wave2dem) if count==3 & partyid<4, vce(cluster psidcode3)

estat proportion, force

mediate(revdemsat wave1dem wave1rep wave2dem wave2ind wave3dem wave3rep wave3ind, linear) (revtrustpres wave1dem wave1rep wave2dem wave2ind wave3dem wave3rep wave3ind, linear) (wave2rep) if count==3 & partyid<4, vce(cluster psidcode3)

estat proportion, force

mediate(revdemsat wave1dem wave1rep wave2dem wave2rep wave2ind wave3rep wave3ind, linear) (revtrustpres wave1dem wave1rep wave2dem wave2rep wave2ind wave3rep wave3ind, linear) (wave3dem) if count==3 & partyid<4, vce(cluster psidcode3)

estat proportion, force

mediate(revdemsat wave1dem wave1rep wave2dem wave2rep wave2ind wave3dem wave3ind, linear) (revtrustpres wave1dem wave1rep wave2dem wave2rep wave2ind wave3dem wave3ind, linear) (wave3rep) if count==3 & partyid<4, vce(cluster psidcode3)

estat proportion, force

medsens (regress revtrustpres wave1dem wave1rep wave2dem wave2rep wave3dem wave3rep wave2ind wave3ind ) (regress revdemsat wave1dem wave1rep wave2dem wave2rep wave3dem wave3rep wave2ind wave3ind revtrustpres) if count==3, mediate(revtrustpres) treat(wave2dem) sims(1000)

*Table 3

reg revdemsat i.wave##trumpvote, vce(cluster psidcode3)
xtset psidcode3
xtreg revdemsat i.wave##trumpvote if count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##trumpvote alphaeconoutlook if count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##trumpvote posaffect negaffect if count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##trumpvote revtrustpres if count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##trumpvote alphaeconoutlook posaffect negaffect revtrustpres if count==3, fe vce(cluster psidcode3)

*Figure 4a-b. See "PP All Excel Figures" and cses5.dta dataset

*Figure 4c. use cses5 and our data.dta dataset

*cibar revdemsat if wave~=1, over1(count2)  graphopts(legend(order(1 2 3 4 5 6 7)) title("Democratic Satisfaction (US vs non-US)", size(medium)) ytitle("mean") legend( label(1 "Non-US average (2016-2019)") label(2 "2016 Independents") label(3 "2016 Democrats") label(4 "2016 Republicans") label(5 "2025 Independents") label(6 "2025 Democrats") label(7 "2025 Republicans") cols(1)))

*Online Appendix Replication 

*Economic Outlook Index

cibar CSI1 if partyid<4, over1(wave) over2(partyid) vce(cluster psidcode3)
cibar CSI2 if partyid<4, over1(wave) over2(partyid) vce(cluster psidcode3)
cibar CSI3 if partyid<4, over1(wave) over2(partyid) vce(cluster psidcode3)
cibar CSI4 if partyid<4, over1(wave) over2(partyid) vce(cluster psidcode3)

factor CSI1-CSI4
alpha CSI1-CSI4

*Emotional Affect Indices

alpha revangry revafraid revsad revworried
alpha revhappy revproud

catcibar revangry-revproud if partyid<4, over(wave) by(partyid)

factor revangry revafraid revsad revworried
factor revhappy revproud

*Institutional Trust Items

catcibar revtrustpres revtrustcongress revtrustsc if partyid<4, over(wave) by(partyid)

*Institutional Approval Items

catcibar PRESAPP3 CONGAPP3 SCOTUSAPP3 if partyid<4, over(wave) by(partyid)

*Manuscript Robustness Checks

*Satisfaction with Democracy over Time (Ordered Logit Regression)

xtologit revdemsat i.wave##ib3.partyid if partyid<4 & count==3,   vce(cluster psidcode3)
xtologit revdemsat i.wave##ib3.partyid alphaeconoutlook  if partyid<4 & count==3,  vce(cluster psidcode3)
xtologit revdemsat i.wave##ib3.partyid posaffect negaffect if partyid<4 & count==3,  vce(cluster psidcode3)
xtologit revdemsat i.wave##ib3.partyid revtrustpres if partyid<4 & count==3,  vce(cluster psidcode3)
xtologit revdemsat i.wave##ib3.partyid alphaeconoutlook posaffect negaffect revtrustpres if partyid<4 & count==3,  vce(cluster psidcode3)

*Policy Mechanisms Beyond the Economy

xtreg revdemsat i.wave##ib3.partyid violentcrime if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid bordercontrol if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid climatechange if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid antiterrorism if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid poverty if partyid<4 & count==3, fe vce(cluster psidcode3)

xtreg revdemsat i.wave##ib3.partyid educpolicy if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid healthcare if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid inflation if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid illimmigration if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid drugproblems if partyid<4 & count==3, fe vce(cluster psidcode3)

*Affective Polarization Considerations

catcibar demtherm100 reptherm100 if partyid<4, over(wave) by(partyid)
catcibar affpol100abs reptherm100 if partyid<4, over(wave) by(partyid)

ttest affpol100abs if partyid~=2 & partyid<4 & wave==1, by(partyid) unpaired unequal

*Satisfaction with Democracy over Time and Affective Polarization (OLS Regression)

xtreg revdemsat i.wave##ib3.partyid affpol100abs if partyid<4 & count==3, fe vce(cluster psidcode3)

*Institutional Trust Beyond the Presidency

xtreg revdemsat i.wave##ib3.partyid revtrustcongress if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid revtrustsc if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid revtrustcongress revtrustsc revtrustpres if partyid<4 & count==3, fe vce(cluster psidcode3)

*Mediation Analysis

*Satisfaction with Democracy over Time (OLS Regression)

xtreg revdemsat i.wave##ib3.partyid if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg alphaeconoutlook i.wave##ib3.partyid if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid alphaeconoutlook if partyid<4 & count==3, fe vce(cluster psidcode3)

xtreg posaffect i.wave##ib3.partyid if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg negaffect i.wave##ib3.partyid if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid posaffect negaffect if partyid<4 & count==3, fe vce(cluster psidcode3)

xtreg revtrustpres i.wave##ib3.partyid if partyid<4 & count==3, fe vce(cluster psidcode3)
xtreg revdemsat i.wave##ib3.partyid revtrustpres if partyid<4 & count==3, fe vce(cluster psidcode3)


*Mediation Analysis on Satisfaction with Democracy

*See "PP All Excel Figures". 

*Mediation with Structural Equation Models

sem (revtrustpres -> revdemsat, ) (wave2dem -> revdemsat, ) (wave2dem -> revtrustpres, ) (democrat -> revdemsat, ) (democrat -> revtrustpres, ) (wave2 -> revdemsat, ) (wave2 -> revtrustpres, ) if count==3, vce(cluster psidcode3) nocapslatent

medsem, indep(wave2dem) med(revtrustpres) dep(revdemsat) stand rit zlc

sem (revtrustpres -> revdemsat, ) (wave2rep -> revdemsat, ) (wave2rep -> revtrustpres, ) (republican -> revdemsat, ) (republican -> revtrustpres, ) (wave2 -> revdemsat, ) (wave2 -> revtrustpres, ) if count==3, vce(cluster psidcode3) nocapslatent

medsem, indep(wave2rep) med(revtrustpres) dep(revdemsat) stand rit zlc

*See also full factor interactions for wave and party id. 

xi: sem (revtrustpres -> revdemsat, ) (wave1dem -> revtrustpres, ) (wave1dem -> revdemsat, ) (wave1rep -> revtrustpres, ) (wave1rep -> revdemsat, ) (wave2dem -> revtrustpres, ) (wave2dem -> revdemsat, ) (wave2rep -> revtrustpres, ) (wave2rep -> revdemsat, ) (wave2ind -> revtrustpres, ) (wave2ind -> revdemsat, ) (wave3dem -> revtrustpres, ) (wave3dem -> revdemsat, ) (wave3rep -> revtrustpres, ) (wave3rep -> revdemsat, ) (wave3ind -> revtrustpres, ) (wave3ind -> revdemsat, ) if count==3 & partyid<4, vce(cluster psidcode3) nocapslatent

medsem, indep(wave3dem) dep(revdemsat) med(revtrustpres) zlc

*Balance tests 

*Sample Demographic Characteristics Across Three Waves

iebaltab female ageyear education white black dlatino north-west hhincome religious devangelical democrat republican independent ideo dbornusa, groupvar(wave) savexlsx(panelbalance) 

*Attrition analysis 

*Balance Tests for Panel Attrition

ksmirnov female, by(attrition123)
ksmirnov ageyear, by(attrition123)
ksmirnov education, by(attrition123)
ksmirnov hhincome, by(attrition123)
ksmirnov democrat, by(attrition123)
ksmirnov republican, by(attrition123)
ksmirnov independent, by(attrition123)
ksmirnov devangelical, by(attrition123)

ksmirnov white, by(attrition123)
ksmirnov black, by(attrition123)
ksmirnov dlatino, by(attrition123)
ksmirnov religious, by(attrition123)
ksmirnov ideo, by(attrition123)
ksmirnov north, by(attrition123)
ksmirnov south, by(attrition123)
ksmirnov midwest, by(attrition123)
ksmirnov west, by(attrition123)
ksmirnov dbornusa, by(attrition123)

iebaltab female ageyear education white black dlatino north-west hhincome religious devangelical democrat republican independent ideo dbornusa, groupvar(attrition123) savexlsx(attrition123balance) vce(cluster psidcode3)

*Analysis of Panel Attrition vs. Non-Attrition (Logit Regression)

logit attrition123 female ageyear education dlatino white black democrat republican independent north south midwest west hhincome religious devangelical ideo dbornusa, vce(cluster psidcode3)

*Inverse probability weighting

histogram ipw

reg revdemsat i.wave##ib3.partyid   if partyid<4 & count==3 [pweight=ipw], vce(cluster psidcode3)
reghdfe revdemsat i.wave##ib3.partyid if partyid<4 & count==3 [aweight=ipw], vce(cluster psidcode3) absorb(psidcode3)
reghdfe revdemsat i.wave##ib3.partyid mmx_factoreconoutlook  if partyid<4 & count==3 [aweight=ipw], vce(cluster psidcode3) absorb(psidcode3)
reghdfe revdemsat i.wave##ib3.partyid negaffect posaffect affpol100abs  if partyid<4 & count==3 [aweight=ipw], vce(cluster psidcode3) absorb(psidcode3)
reghdfe revdemsat i.wave##ib3.partyid revtrustpres revtrustcongress revtrustsc  if partyid<4 & count==3 [aweight=ipw], vce(cluster psidcode3) absorb(psidcode3)


*Treatment effects

teffects ipw (revdemsat) (wave female ageyear education dlatino white black dlatino north-west hhincome religious devangelical democrat republican independent ideo dbornusa) if partyid<4 & count==3 & partyid==1, vce(cluster psidcode3)

teffects ipw (revdemsat) (wave female ageyear education dlatino white black dlatino north-west hhincome religious devangelical democrat republican independent ideo dbornusa) if partyid<4 & count==3 & partyid==2, vce(cluster psidcode3)

*Attrition on Key Outcome and IVs (Logit Regression)

logit attrition123 revdemsat, vce(cluster psidcode3)
logit attrition123 mmx_factoreconoutlook, vce(cluster psidcode3)
logit attrition123 negaffect posaffect affpol100abs, vce(cluster psidcode3)
logit attrition123 revtrustpres revtrustcongress revtrustsc, vce(cluster psidcode3)

*Summary Demographics for Panel, Wave 1-3

*Panel Data (all 3 waves, divide n=1287 by 3 = 429 observations)

sum revdemsat alphaeconoutlook  negaffect posaffect affpol100abs  revtrustpres revtrustcongress revtrustsc i.partyid ideo female ageyear education i.race dlatino dbornusa devangelical religious hhincome  i.Region if count==3

*Wave 1 Full Sample 

sum revdemsat alphaeconoutlook negaffect posaffect affpol100abs  revtrustpres revtrustcongress revtrustsc i.partyid ideo female ageyear education i.race dlatino dbornusa devangelical religious hhincome  i.Region if wave==1

*Wave 2 Full Sample

sum revdemsat alphaeconoutlook negaffect posaffect affpol100abs  revtrustpres revtrustcongress revtrustsc i.partyid ideo female ageyear education i.race dlatino dbornusa devangelical religious hhincome  i.Region if wave==2

*Wave 3 Full Sample

sum revdemsat alphaeconoutlook negaffect posaffect affpol100abs  revtrustpres revtrustcongress revtrustsc i.partyid ideo female ageyear education i.race dlatino dbornusa devangelical religious hhincome  i.Region if wave==3

*Sample Demographic Characteristics Across Three Waves

*See panelbalance.xls

*Changes in Democratic Satisfaction Relative to Previous Elections

*See "PP All Excel Figures". 

*We find that the average U.S. democratic satisfaction scores were greater among partisan Democrats and Republicans in 2016 compared to the non-U.S. average (unpaired t-tests, t = 12.7, p<0.0000; t = 22.5, p<0.0000, respectively). 

ttesti 29907 2.44 0.87 1055 2.72 0.70, unequal 
ttesti 29907 2.44 0.87 930 2.94 0.66, unequal

*In 2025, following Trump's inauguration, Democrats are now at the same level as non-US averages in 2016, while Republicans still remain above the 2016 non-US averages (t =1.52, p<0.06; t = 9.83, p<0.0000, respectively). 

ttesti 29907 2.44 0.87 237 2.53 0.91, unequal 
ttesti 29907 2.44 0.87 250 2.94 0.80, unequal

*Democrats have also declined and Republicans have remained the same compared to 2016 U.S. averages (t =3.02, p<0.001; t = 0.00, p<0.50, respectively). Independents in 205, however, are not statistically different from the non-U.S. average for democratic satisfaction. 

ttesti 1055 2.72 0.70 237 2.53 0.91, unequal 
ttesti 930 2.94 0.66 250 2.94 0.80, unequal
ttesti 29907 2.44 0.87 185 2.44 0.91, unequal 

log close
